
int data = 3;
int latch = 4;
int clock = 5;

void setup()
{
  pinMode(data, OUTPUT);
  pinMode(latch, OUTPUT);
  pinMode(clock, OUTPUT);
  // Open serial port
  //Serial.begin(9600);
}

void runDisplayCycle(long andValue)
{
  long value, valueToDisplay;
  value=0;
  updateLEDs(0x00003FFF);
  delay(50);
  for (int i=0; i<15; i++)
  {
    value = value | (1 << i);
    valueToDisplay = andValue | (value<<14);
    updateLEDs(valueToDisplay);
    delay(50);
  }
}

void loop()
{
    // N
    runDisplayCycle(11868L);
    // 1
    runDisplayCycle(15351L);
    // 2
    runDisplayCycle(1419L);
    // 3
    runDisplayCycle(1450L);
    // 4
    runDisplayCycle(3902L);
    // 5
    runDisplayCycle(5418L);
    // 6
    runDisplayCycle(5386L);
    // 7
    runDisplayCycle(9726L);
    // R
    runDisplayCycle(1309L);
}

void updateLEDs(long value)
{
  byte byte1, byte2, byte3, byte4;
  byte4 = (value & 0xFF000000L)>>24;
  byte3 = (value & 0x00FF0000L)>>16;
  byte2 = (value & 0x0000FF00L)>>8;
  byte1 = value & 0x000000FFL;
  
  digitalWrite (latch, LOW);
  shiftOut(data, clock, MSBFIRST, byte4);
  shiftOut(data, clock, MSBFIRST, byte3);
  shiftOut(data, clock, MSBFIRST, byte2);
  shiftOut(data, clock, MSBFIRST, byte1);
  digitalWrite (latch, HIGH);
}


